fn main() {
    // 在rust语言中，变量默认是不可改变的。即：当变量不可变时，一旦值被绑定一个名称上，你就不能改变这个值。
    let x = 5;
    println!("The value of x is: {}", x);
    x = 6;
    println!("The value of x is: {}", x);

    // 在变量名之前加 mut 来使其可变

    // 变量和常量的区别:
    // 1. 不允许对常量使用 mut。常量不光默认不能变，它总是不能变。
    // 2. 声明常量使用 const 关键字而不是 let，并且 必须 注明值的类型。
    // 3. 常量可以在任何作用域中声明，包括全局作用域，这在一个值需要被很多部分的代码用到时很有用。
    // 4. 常量只能被设置为常量表达式，而不能是函数调用的结果，或任何其他只能在运行时计算出的值。
    
    // Rust 常量的命名规范是使用下划线分隔的大写字母单词，并且可以在数字字面值中插入下划线来提升可读性
    const MAX_POINTS: u32 = 100_000;


    // 隐藏（Shadowing）
    // 我们可以定义一个与之前变量同名的新变量，而新变量会 隐藏 之前的变量。
    // 隐藏与将变量标记为 mut 的区别：
    // 1. 当尝试对变量重新赋值时，如果没有使用 let 关键字，就会导致编译时错误。通过使用 let，我们可以用这个值进行一些计算，不过计算完之后变量仍然是不变的。
    // 2. 当再次使用 let 时，实际上创建了一个新变量，我们可以改变值的类型，但复用这个名字
}
